PHP运行PHP代码
一、 eval 函数
此函数运行PHP代码变量
函数把字符串按照 PHP 代码来计算。
该字符串必须是合法的 PHP 代码,且必须以分号结尾。
如果没有在代码字符串中调用 return 语句,则返回 NULL。如果代码中存在解析错误,则 eval() 函数返回 false。
$symbol = “+”;
$a = 1;
$b = 2;
$c = $a.$symbol.$b;
echo $c.”\n”;
eval(“echo $c;“);
此处 直接输出 $c 则是字符串 1+2
以 eval 方式输出 结果则是 3 相当于 执行了 echo $a + $b;
注:此函数 官方不建议用,有安全问题
二、流协议加载
自定义一个流协议 include 或require 加载协议
function getCode()
{
return ‘<?php echo ‘www.bubaiso.com’?>’;
}
//自定义协议
class VariableStream
{
private $string;
private $position;
public function stream_open()
{
//getCode 接收到参数
$this->string = getCode();
$this->position = 0;
return true;
}
public function stream_read($count)
{
$ret = substr($this->string, $this->position, $count);
$this->position += strlen($ret);
return $ret;
}
public function stream_eof()
{
}
public function stream_stat()
{
}
}
//注册流协议
stream_wrapper_register(“myStr”, “VariableStream”);
include(“var://“);
返回值无法接收
三、 PHP代码 写入文件, 然后用PHP函数调用系统命令
函数 exec 这个函数带返回值
$str = “<?php echo ‘www.bubaiso.com’;?>”;
$fileName = ‘run.php’;
//创建文件
$myfile = fopen($fileName, “w”) or die(“Unable to open file!”);
//写入数据
fwrite($myfile, $str);
//关闭
fclose($myfile);
exec(“php $fileName”,$out,$status);
//需要删除的话 这里是执行之后删除文件操作
unlink($fileName);
//$out 如果参数里面有 ‘\n’ 回车符 返回值是个数组 可以拼接返回数据
$value = ”;
foreach ($out as $v){
$value .= $v.”\n”;
}
echo $value;